<?php
declare (strict_types=1);

namespace app\controller\v1\admin;

use app\BaseController;
use app\common\Send;
use app\service\AdminUserService;
use app\validate\AdminUser as AdminUserValidate;
use think\App;
use think\Request;

class AdminUser extends BaseController
{
    use Send;

    protected $adminUserService;

    public function __construct(App $app, AdminUserService $adminUserService)
    {
        parent::__construct($app);
        $this->adminUserService = $adminUserService;
    }

    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        try {
            $data = $this->request->param();
            $result = $this->adminUserService->list($data);
            return self::success($result);
        } catch (\Exception $e) {
            return self::error($e->getMessage(), [], method_exists($e, 'getStatusCode') ? $e->getStatusCode() : $e->getCode());
        }
    }


    /**
     * 保存新建的资源
     *
     * @param \think\Request $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        $data = $request->param();
        $result = $this->adminUserService->save($data);
        return self::success($result);
    }

    /**
     * 显示指定的资源
     *
     * @param int $id
     * @return \think\Response
     */
    public function read($id)
    {
        $id = $id>0?$id:request()->_uid;
        $result = $this->adminUserService->read($id);
        return self::success($result);
    }

    /**
     * 保存更新的资源
     *
     * @param \think\Request $request
     * @param int $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        (new AdminUserValidate)->goCheck($request->param());
        $this->adminUserService->update($id, $request->param());
        return self::success("更新成功");
    }

    /**
     * 删除指定资源
     *
     * @param int $id
     * @return \think\Response
     */
    public function delete($id)
    {
        $result = $this->adminUserService->delete($id);
        return self::success($result);
    }

    /**
     * 用户登录方法
     *
     * 此方法尝试处理管理员用户的登录请求它首先获取请求参数，
     * 然后调用AdminUserService的login方法进行登录验证如果登录成功，
     * 它将返回一个成功响应，包含登录结果和成功消息如果登录失败或发生异常，
     * 它将捕获异常并返回一个错误响应，包含异常消息和状态码
     *
     * @return array 成功或错误响应数组
     */
    public function login()
    {
        // 获取请求参数
        $data = $this->request->param();
        // 调用服务层的登录方法并获取结果
        $result = $this->adminUserService->login($data);
        // 返回成功响应
        return self::success($result, '登录成功!');
    }

    /**
     * 退出登录功能
     * 该方法尝试从请求中获取令牌，并调用用户服务中的退出方法
     * 如果操作成功，返回一个表示成功的响应，否则捕获异常并返回一个表示错误的响应
     */
    public function logout()
    {
        // 从请求中获取令牌
        $token = request()->_token;
        // 调用用户服务的退出方法，并返回成功信息
        $result = $this->adminUserService->logout($token);
        return self::success($result, '退出成功!');
    }
}
